﻿// B. And.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1013/B

有一个数组，其中包含 n 个元素 a1、a2、......、an 和数字 x。

在一次操作中，你可以选择一些 i（1 ≤ i ≤ n），并用 ai & x 替换元素 ai，其中 & 表示位操作和操作。

您希望数组在执行某些操作（也可能不执行）后至少有两个相等的元素。换句话说，应该至少有两个不同的索引 i ≠ j，
使得 ai = aj。确定是否有可能实现这一目标，如果有可能，确定最少需要进行多少次运算。

输入
第一行包含整数 n 和 x（2 ≤ n ≤ 100 000，1 ≤ x ≤ 100 000）、数组中元素的个数以及 to 和 with 的个数。

第二行包含 n 个整数 ai（1 ≤ ai ≤ 100 000），即数组中的元素。

输出
打印一个表示最小操作数的整数，如果不可能，则打印-1。

InputCopy
4 3
1 2 3 7
OutputCopy
1


InputCopy
2 228
1 1
OutputCopy
0


InputCopy
3 7
1 2 3
OutputCopy
-1

注意
在第一个例子中，我们可以对数组的最后一个元素进行操作。这样就可以将 7 替换为 3，一举达到目的。

在第二个例子中，数组已经有两个相等的元素。

在第三个示例中，执行操作不会改变数组，因此不可能使某对元素相等。
*/




#include <iostream>
#include <cstring>
#include <unordered_set>


using namespace std;

int n, x;
 
unordered_set<int> a;
unordered_set<int> b;
int main()
{
	cin >> n >> x;
	int ans = 999;
	for (int i = 1; i <= n; i++) {
		int t; cin >> t;
		if (a.count(t) ) {
			ans = min(ans, 0);
		}
		if (a.count(t & x) || b.count(t)) {
			ans = min(ans, 1);
		}
		if (b.count(t & x)) {
			ans = min(ans, 2);
		}
		a.insert(t);
		b.insert(t & x);
	}

	if (ans == 999) ans = -1;
	cout << ans << endl;

	return 0;
}
 